//
//  OSSpinLockDemo.swift
//  sinaDemo
//
//  Created by admin on 2021/7/9.
//

import UIKit

class OSSpinLockDemo: LockBase {
    //自旋锁：加锁后，后来的线程会判断当前锁是否是加锁状态，是的话就会while（加锁）一直占用cpu。由于会导致优先级翻转，所以被弃用咯。何为优先级翻转？
    //优先级翻转：当优先级较低的队列的子线程加锁后，遇到优先级高的队列想要去拿锁，这就造成优先级高的一直在占用cpu时间。cpu不会分配多余时间去给当前优先级低的线程，造成任务迟迟完不成。
    //加锁注意事项：对同一资源进行访问的各个线程，需要拿到同一把锁~。否则无效。
    var osspinlock:OSSpinLock = OS_SPINLOCK_INIT
    var osspinlock1:OSSpinLock = OS_SPINLOCK_INIT
    
    
    override func saleTickets() {
        OSSpinLockLock(&osspinlock)
        super.saleTickets()
        OSSpinLockUnlock(&osspinlock)
    }
    override func saveMoney() {
        OSSpinLockLock(&osspinlock1)
        super.saveMoney()
        OSSpinLockUnlock(&osspinlock1)
    }
    override func payMoney() {
        OSSpinLockLock(&osspinlock1)
        super.payMoney()
        OSSpinLockUnlock(&osspinlock1)
    }
}
